package cn.itcast.annotation.ParsingBug;

import javax.swing.text.html.HTMLEditorKit;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 简单的测试模板，进行测试类中方法，并且将错误信息打印在bug.txt中
 *
 * for-each(){}---快捷键   iter
 * @author Mc.Chai
 * @program: JavaWeb
 * @create 2021-12-07-15:36 15:36
 */
public class TestCalculator {
    public static void main(String[] args) throws IOException {
        //获得该类的对象
        Calculator calculator = new Calculator();
        //获得该类的Class对象
        Class calculatorClass = calculator.getClass();
        //获取所有的方法
        Method[] methods = calculatorClass.getMethods();
        //创建一个流将异常信息输入到bug.txt文件中
        int number=0;//记录异常的次数
        PrintWriter printWriter=new PrintWriter(new OutputStreamWriter(new FileOutputStream("Bug.txt")));


        for (Method method : methods) {
            //判断方法上有没有@check的注解，如果有则执行检测   isAnnotationPresent()方法
            if (method.isAnnotationPresent(check.class)){
                try {
                    //invoke(对象)    执行这个对象的方法
                    method.invoke(calculator);


                } catch (Exception e) {
                    printWriter.println(method.getName()+"出现异常！");
                    printWriter.println("异常的名称："+e.getCause().getClass().getSimpleName());
                    printWriter.println("异常的原因："+e.getCause().getMessage());
                    printWriter.println("-----------------------------");
                    number++;

                }
            }

        }
        //将异常信息打印到文件中
        printWriter.println("本次检测一共出现"+number+"次异常");
        printWriter.flush();
        printWriter.close();
    }
}
